package main

import (
	"fmt"
	"math/rand"
	"os"
	"strconv"
	"time"
)

func pErr(format string, a ...interface{}) {
	fmt.Fprint(os.Stdout, os.Args[0], ": ")
	fmt.Fprintf(os.Stdout, format, a...)
}

func findQuotes(data string) []string {
	var idx []int
	for i, v := range data {
		if v == 34 { // 找到所有{"}的位置
			idx = append(idx, i)
		}
	}

	var (
		idxLen = len(idx)
		ret    []string
	)
	if idxLen >= 2 && idxLen%2 == 0 { // 至少2个引号,以及成对出现才记录
		for i := 0; i < idxLen; i += 2 {
			if idx[i+1]-idx[i] > 1 { // 两个引号中间有数据才记录
				ret = append(ret, data[idx[i]+1:idx[i+1]])
			}
		}
	}

	return ret
}

func main() {
	//str := `window.QRLogin.code = 200; window.QRLogin.uuid = "IdonVZtLlw==";`
	str := `window.QRLogin.code = 200; window.QRLogin.uuid = """""zx","2312""23sdfgxc";`
	xx := findQuotes(str)
	if xx == nil {
		fmt.Println("nil")
	}
	fmt.Println(xx)

	//ret := 0
	//defer func() { os.Exit(ret) }()
	//
	//grid, err := qrencode.EncodeBytes([]byte("https://www.baidu.com/"), qrencode.ECLevelL)
	//if err != nil {
	//	pErr("encode failed: %v\n", err)
	//	ret = 1
	//	return
	//}
	//
	//Inverse := false // 反色
	//da1, err := tty.GetDeviceAttributes1(os.Stdout)
	//if err == nil && da1[tty.DA1_SIXEL] {
	//	qrc.PrintSixel(os.Stdout, grid, Inverse)
	//} else {
	//	stdout := colorable.NewColorableStdout()
	//	qrc.PrintAA(stdout, grid, Inverse)
	//}

	//b, _ := ioutil.ReadFile("qrCode.jpg")
	//a := string(b)
	//qrterminal.Generate(a, qrterminal.H, os.Stdout)
	//
	//content := "Hello, 世界"
	//obj := qrcodeTerminal.New()
	//obj.Get(a).Print()

	//fi, err := os.Open("qrCode.jpg")
	//if err != nil {
	//	log.Println(err.Error())
	//	return
	//}
	//defer fi.Close()
	//qrmatrix, err := qrcode.Decode(fi)
	//if err != nil {
	//	log.Println(err.Error())
	//	return
	//}
	//log.Println(qrmatrix.Content)

	//fr, err := os.Open("qrCode.jpg")
	//if err != nil {
	//	panic(err)
	//}
	//defer fr.Close()
	//
	//img, err := jpeg.Decode(fr)
	//if err != nil {
	//	panic(err)
	//}
	//
	//isBlackColour := func(r, g, b uint32) bool { /* 二值化,阈值为150 */
	//	if float32(r>>8)*0.11+float32(g>>8)*0.59+float32(b>>8)*0.3 >= 150 {
	//		return false
	//	} // 如果改点为黑色返回true,为白色返回false
	//	return true
	//}
	//
	//bounds := img.Bounds()
	//dx, dy := bounds.Dx(), bounds.Dy()
	//for x := 0; x < dx; x += 10 {
	//	for y := 0; y < dy; y += 10 {
	//		r, g, b, _ := img.At(y, x).RGBA()
	//		if isBlackColour(r, g, b) {
	//			fmt.Print("▇")
	//		} else {
	//			fmt.Print("　")
	//		}
	//	}
	//	fmt.Println()
	//} // 控制台修改为点阵字体,选中即可反色即可扫描

	//ts, rs := timeStamp()
	//fmt.Println(ts, rs)
	//
	//rand.Seed(ts)
	//
	//xx := make(map[string]int)
	//for i := 0; i < 100; i++ {
	//	a := deviceID()
	//	xx[a]++
	//
	//	fmt.Println(a, len(a))
	//}
	//fmt.Println(len(xx))
}

/**
js代码:
return "e" + ("" + Math.random().toFixed(15)).substring(2, 17)
**/
func deviceID() string {
	return fmt.Sprintf("e%015d", rand.Int63n(999999999999999))
}

/**
在js代码中为:
var ts = new Date()
var rs = ~ts
**/
func timeStamp() (int64, int64) {
	var (
		ts     = time.Now().UnixNano() / 1e6
		binary = fmt.Sprintf("%064b", ts)
		retStr string
	)
	for i := 32; i < 64; i++ {
		if binary[i] == 48 {
			retStr += "1"
		} else {
			retStr += "0"
		}
	}

	// 将结果的二进制字符串转换为int64的10进制
	rs, _ := strconv.ParseInt(retStr, 2, 64)
	return ts, rs
}
